<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
</head>
<body>

    <script>

    /* ### 练习题2：

    **目标：**求和函数封装练习

    **要求:**

    1. 封装函数, 名字为sum
    2. 功能: 根据传入的两个数,求和并且返回求和的结果（函数必须有return返回值）*/

// function sum(x, y){
//     let res = x + y
//     return res
// }
// let te = sum (1, 2)
// document.write(`两者的和是${te}`)




    /* ### 练习题3：

    **目的:**  封装函数, 复习函数的基本写法。

    **需求：**实现两个数的值交换(函数版本)  

    **分析:**

    1. 函数名为 changeNum()
    2. 调用函数时,  `changeNum(1，2)`
    3. 经过函数内部处理后,输出  `第一个值的结果是2  第二个值的结果是1`
    4. 可以多调用两次
 */

// function changNum(x, y){
//     let t = x
//     x = y
//     y = t
//     document.write(`第一个值的结果是${x} <br> 第二个值的结果是${y}`)
// }
// changNum(1, 2)



    /* ### 练习题4：

    **目的:** 复习函数的声明与调用

    **题目：**封装余额函数

    **要求:**

    1. 运行程序后, 浏览器显示输入确认框(prompt)
    2. 第一个输入确认框提示输入银行卡余额
    3. 第二个输入确认框提示输入当月食宿消费金额
    4. 第三个输入确认框提示输入当月生活消费金额
    5. 输入完毕后,在页面中显示银行卡剩余金额
    6. 提示: 所有功能代码封装在函数内部（函数需要把余额返回） */

// function result() {
//   let a = prompt('银行卡金额')
//   let b = prompt('当月食宿消费金额?')
//   let c = prompt('当月生活消费金额?')
//   let d = a - b - c
//   return d
// }
// let money = result() 
// document.write(`我的银行卡余额还有${money}元`)




    /* ### 练习题5:

    **目标：** 封装一个函数,可以求任意数组的和 或 平均值

    **要求：**

    - 函数可以传递2个参数，比如  handleData(arr, true)      `handleData 处理数据的意思`
    * 参数一： 接受实参传递过来的数组
    * 参数二:    布尔类型  如果是true或者不传递参数 是求和操作，   如果传递过来的参数是 false 则是求平均值 */

// function handleData(arr, flag = true){
//     let sum = 0;
//     for(let i = 0; i < arr.length; i++){
//         sum += arr[i]
//     }
//     if(flag){
//         return sum
//     }else {
//         return sum / arr.length
//     }
// }
// console.log(handleData([1, 2, 3]))  // 6
// console.log(handleData([1, 2, 3], true))  // 6
// console.log(handleData([1, 2, 3], false))  // 2


   /*  ### 拓展题1

    需求：  封装 some 函数查看数组是否存在某个元素  。

    - 要传递2个参数 元素、数组
    - 如果数组存在元素则返回true，如果没有存在元素就返回 false

    例如检测 香蕉  是否存在于  数组['苹果', '香蕉', '橘子', '荔枝', '梨子']中， 返回结果是 true

    格式如下：

    ~~~javascript*/
    
    // function some(ele, arr = []) {
    //     // 里面写业务逻辑
    //     let flag = false
    //     for(let i = 0; i < arr.length; i++){
    //         if(ele === arr[i]){
    //             flag = true
    //             break
    //         }
    //     }
    //     return flag
    // }
    // let re = some('荔枝', ['苹果', '香蕉', '橘子', '荔枝', '梨子'])
    // console.log(re) // true
    // let re1 = some('榴莲', ['苹果', '香蕉', '橘子', '荔枝', '梨子'])
    // console.log(re1) // false 
    




    /* ### 拓展题2 

    需求：  封装 findeIndex 函数返回查找元素在数组中的索引号。

    - 要传递2个参数 元素、数组
    - 如果找到，则返回查找元素在数组中的索引号，如果查找不到，则返回 -1

    例如检测 香蕉    数组['苹果', '香蕉', '橘子', '荔枝', '梨子']中， 返回结果是  1

    格式如下：*/

    //<script>
        // 封装函数返回元素的下标  [1, 5, 10, 22, 8, 7]
        // 1. 封装函数 findIndex，传递2个参数 元素、数组
        function findIndex(ele, arr = []) {
            // 里面写业务逻辑
            let index = -1
            for(let i = 0; i < arr.length; i++){
                if(ele === arr[i]){
                    index =i
                    break
                }
            }
            return index
        }
        let index1 = findIndex(10, [1, 5, 10, 22, 8, 7])
        console.log(index1) // 2
        let index2 = findIndex(8, [1, 5, 10, 22, 8, 7])
        console.log(index2) // 4
        let index3 = findIndex(88, [1, 5, 10, 22, 8, 7])
        console.log(index3) // -1
   </script> 




    </script>
    
</body>
</html>